package com.git.contractmanagement.util;


import at.favre.lib.crypto.bcrypt.BCrypt;

/**
 * 密码加密与验证工具类
 */
public class PasswordUtil {

    /**
     * 加密明文密码
     * @param rawPassword 明文密码
     * @return 加密后的密码（以 $2a$ 开头）
     */
    public static String encode(String rawPassword) {
        if (rawPassword == null) {
            return null;
        }
        return BCrypt.withDefaults().hashToString(12, rawPassword.toCharArray());
    }

    /**
     * 验证明文密码与加密密码是否匹配
     * @param rawPassword 明文密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    public static boolean matches(String rawPassword, String encodedPassword) {
        if (rawPassword == null || encodedPassword == null) {
            return false;
        }
        BCrypt.Result result = BCrypt.verifyer().verify(rawPassword.toCharArray(), encodedPassword);
        return result.verified;
    }

    /**
     * 判断密码是否已是 BCrypt 加密格式（以 $2a$ 开头）
     * @param password 密码字符串
     * @return 是否已加密
     */
    public static boolean isBcryptEncoded(String password) {
        return password != null && password.startsWith("$2a$");
    }
}
